#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN=10000050;
int a[22];
int n,t;
//dp[i][j]表示面对第i个物品 可用容量为j的最大装容量
int dp[22][MAXN];
int main(void){
    while(~scanf("%d%d",&n,&t)){
        memset(dp,-1,sizeof(dp));
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=0;i<MAXN;i++){
            dp[0][i]=0;
        }
        for(int i=1;i<=n;i++){
            for(int j=0;j<MAXN;j++){
                //默认不选这第i个
                dp[i][j]=dp[i-1][j];
                //最坏情况 可用容量可以装这第i个
                if(j>=a[i]){
                    if(dp[i-1][j-a[i]]+a[i]>dp[i][j]){
                        dp[i][j]=dp[i-1][j-a[i]]+a[i];
                    }
                }
            }
        }
        int j=n;
        for(int i=t;i>=1;i--){
            if(dp[i][j]!=dp[i-1][j]){
                printf("%d ",a[i]);
                j-=a[i];
            }
        }
        printf("sum:%d\n",dp[t][n]);
    }
    return 0;
}
